home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / umich / utils / kbext.arc / KBEXT.ASM < prev    next >
Assembly Source File  |  1987-07-12  |  12KB  |  264 lines

  1. ;***************************************************************
  2. ;*                                                             *
  3. ;* KBEXT.ASM: extend keyboard functions                        *
  4. ;* installs itself in the keyboard interrupt                   *
  5. ;* valid for TOS 20/11/1985                                    *
  6. ;*                                                             *
  7. ;* TOS version dependent (marked with **):                     *
  8. ;*     address for kbshifts: A5D (TOS 20.06.85 D)              *
  9. ;*                           E1B (TOS 20.11.85 GB)             *
  10. ;*                           E1B (TOS 06.02.86 D)              *
  11. ;*                                                             *
  12. ;* Version for GST-Assembler                                   *
  13. ;* THIS PROGRAM IS IN THE PUBLIC DOMAIN                        *
  14. ;*                                                             *
  15. ;********* Roland Waldi *** 2.00-87/07 *************************
  16.  
  17.           SECTION   MAIN
  18.           RORG      0
  19.           BRA       install
  20. kbint:
  21.           MOVE.L    TOSvec,A0
  22.           JSR       (A0)           ;* jump to TOS routine
  23.           BRA.S     go
  24. timerint:
  25.           MOVE.W    4(A7),D0
  26.           MOVE.W    D0,-(A7)       ;* copy argument
  27.           MOVE.L    TMRvec,A0
  28.           JSR       (A0)           ;* call etv_timer
  29.           ADDQ.L    #2,A7
  30. go:
  31.           MOVE.L    IOrec,A0
  32.           MOVE.L    (A0),A2        ;* get address of io-buffer
  33.           MOVE.W    8(A0),D1       ;* tail index
  34.           CMP.W     OLDtail,D1     ;* test if changed
  35.           BEQ.S     rturn
  36.           LEA       OLDtail,A1
  37.           MOVE.W    D1,(A1)        ;* save tail index at OLDtail
  38.           MOVE.B    $E1B,D2        ;* get kbshifts (** TOS dependent **)
  39.           BTST      #3,D2          ;* ALT set?
  40.           BEQ.S     rturn          ;* if 0, return
  41.           MOVE.W    0(A2,D1.W),D0  ;*
  42.           AND.W     #$7F,D0        ;* key code
  43.           LEA       ALTtabl,A1     ;* get translation table
  44.           AND.B     #$13,D2        ;* test SHIFT l/r and CapsL
  45.           BEQ.S     goon           ;* if none set
  46.           ADDA.L    #128,A1        ;* use second table (ALT&SHIFT)
  47. goon:
  48.           MOVE.B    0(A1,D0.W),D0  ;* translate
  49.           MOVE.W    D0,2(A2,D1.W)  ;* store char code
  50. rturn:
  51.           RTS
  52. TOSvec:
  53.           DC.L      0
  54. TMRvec:
  55.           DC.L      0
  56. IOrec:
  57.           DC.L      0
  58. OLDtail:
  59.           DC.W      -1
  60. ;*
  61. ;* here are the keyboard tables for normal, SHIFT,
  62. ;*                                  and normal with CAPS LOCK
  63. ;*                                  ALT, ALT&SHIFT
  64. ;*
  65. ;* to change the keyboard layout, use the "normal" table as a
  66. ;* guide for the keys (the layout is for a UK keyboard)
  67. ;* and insert the ATARI/ASCII codes of the characters you want.
  68. ;* NOTE:
  69. ;* with ALT, the positions 02 ('1') ... 09 ('8') move to
  70. ;* 78 ... 7F,
  71. ;* and 0A ('9') ... 0D ('=') to 00 ... 03 (actually 80 ... 83)
  72. ;* these rearrangements are done BY THE PROGRAM
  73. ;*
  74. normal:
  75.           DC.B      $00,$1B,'1','2','3','4','5','6' ;* 00 Esc
  76.           DC.B      '7','8','9','0','-','=',$08,$09 ;* 08 BS,TAB
  77.           DC.B      'q','w','e','r','t','y','u','i' ;* 10
  78.           DC.B      'o','p',$5B,$5D,$0D,$00,'a','s' ;* 18 brackets,CR
  79.           DC.B      'd','f','g','h','j','k','l',';' ;* 20
  80.           DC.B      $27,'`',$00,'#','z','x','c','v' ;* 28 '
  81.           DC.B      'b','n','m',',','.','/',$00,$00 ;* 30
  82.           DC.B      $00,' ',$00,$00,$00,$00,$00,$00 ;* 38
  83.           DC.B      $00,$00,$00,$00,$00,$00,$00,$00 ;* 40
  84.           DC.B      $00,$00,'-',$00,$00,$00,'+',$00 ;* 48
  85.           DC.B      $00,$00,$00,$7F,$00,$00,$00,$00 ;* 50 DEL
  86.           DC.B      $00,$00,$00,$00,$00,$00,$00,$00 ;* 58
  87.           DC.B      $5C,$00,$00,'(',')','/','*','7' ;* 60 \
  88.           DC.B      '8','9','4','5','6','1','2','3' ;* 68
  89.           DC.B      '0','.',$0D,$00,$00,$00,$00,$00 ;* 70 Enter
  90.           DC.B      $00,$00,$00,$00,$00,$00,$00,$00 ;* 78
  91. shiftblk:
  92.           DC.B      $00,$1B,'!','@','#','$','%','^' ;* 00
  93.           DC.B      '&','*','(',')','_','+',$08,$09 ;* 08
  94.           DC.B      'Q','W','E','R','T','Y','U','I' ;* 10
  95.           DC.B      'O','P','{','}',$0D,$00,'A','S' ;* 18
  96.           DC.B      'D','F','G','H','J','K','L',':' ;* 20
  97.           DC.B      '"',$BA,$00,'~','Z','X','C','V' ;* 28
  98.           DC.B      'B','N','M','<','>','?',$00,$00 ;* 30
  99.           DC.B      $00,' ',$00,$00,$00,$00,$00,$00 ;* 38
  100.           DC.B      $00,$00,$00,$00,$00,$00,$00,$00 ;* 40
  101.           DC.B      $00,$00,'-',$00,$00,$00,'+',$00 ;* 48
  102.           DC.B      $00,$00,$00,$7F,$00,$00,$00,$00 ;* 50
  103.           DC.B      $00,$00,$00,$00,$00,$00,$00,$00 ;* 58
  104.           DC.B      '|',$00,$00,'(',')','/','*','7' ;* 60
  105.           DC.B      '8','9','4','5','6','1','2','3' ;* 68
  106.           DC.B      '0','.',$0D,$00,$00,$00,$00,$00 ;* 70
  107.           DC.B      $00,$00,$00,$00,$00,$00,$00,$00 ;* 78
  108. capslock:
  109.           DC.B      $00,$1B,'1','2','3','4','5','6' ;* 00
  110.           DC.B      '7','8','9','0','-','=',$08,$09 ;* 08
  111.           DC.B      'Q','W','E','R','T','Y','U','I' ;* 10
  112.           DC.B      'O','P',$5B,$5D,$0D,$00,'A','S' ;* 18
  113.           DC.B      'D','F','G','H','J','K','L',';' ;* 20
  114.           DC.B      $27,'`',$00,'#','Z','X','C','V' ;* 28
  115.           DC.B      'B','N','M',',','.','/',$00,$00 ;* 30
  116.           DC.B      $00,' ',$00,$00,$00,$00,$00,$00 ;* 38
  117.           DC.B      $00,$00,$00,$00,$00,$00,$00,$00 ;* 40
  118.           DC.B      $00,$00,'-',$00,$00,$00,'+',$00 ;* 48
  119.           DC.B      $00,$00,$00,$7F,$00,$00,$00,$00 ;* 50
  120.           DC.B      $00,$00,$00,$00,$00,$00,$00,$00 ;* 58
  121.           DC.B      $5C,$00,$00,'(',')','/','*','7' ;* 60
  122.           DC.B      '8','9','4','5','6','1','2','3' ;* 68
  123.           DC.B      '0','.',$0D,$00,$00,$00,$00,$00 ;* 70
  124.           DC.B      $00,$00,$00,$00,$00,$00,$00,$00 ;* 78
  125. ALTtabl:
  126.           DC.B      $00,$1B,$BB,$AB,$9C,$AC,$BF,$A9 ;* 78
  127.           DC.B      $BD,$F9,$F8,$B2,$9E,$F0,$00,$00 ;* 00
  128.           DC.B      $91,$C2,$89,$D5,$E7,$98,$81,$8B ;* 10
  129.           DC.B      $94,$E3,$C7,$F5,$00,$00,$84,$9E ;* 18
  130.           DC.B      $EB,$9F,$C4,$C6,$C0,$CC,$CD,$C8 ;* 20
  131.           DC.B      $CA,$CB,$00,$86,$B0,$B1,$87,$DE ;* 28
  132.           DC.B      $C3,$A4,$E6,$DB,$DC,$B3,$00,$00 ;* 30
  133.           DC.B      $00,$20,$00,$00,$00,$00,$00,$00 ;* 38
  134.           DC.B      $00,$00,$00,$00,$00,$00,$00,$00 ;* 40
  135.           DC.B      $00,$00,$D9,$00,$00,$00,$D8,$00 ;* 48
  136.           DC.B      $00,$00,$00,$00,$00,$00,$00,$00 ;* 50
  137.           DC.B      $00,$00,$00,$00,$00,$00,$00,$00 ;* 58
  138.           DC.B      $B4,$00,$00,$E0,$E1,$ED,$EF,$A1 ;* 60
  139.           DC.B      $8C,$8D,$A0,$83,$85,$82,$88,$8A ;* 68
  140.           DC.B      $E9,$E5,$00,$00,$00,$00,$00,$00 ;* 70
  141.           DC.B      $BB,$AB,$9C,$AC,$BF,$A9,$BD,$F9 ;* 78
  142. ;* ALT & SHIFT
  143.           DC.B      $00,$1B,$AD,$B9,$DD,$9B,$F6,$AA ;* 00
  144.           DC.B      $BE,$FA,$A6,$A7,$F7,$F1,$00,$00 ;* 08
  145.           DC.B      $92,$D6,$EE,$D4,$D3,$9D,$9A,$EC ;* 10
  146.           DC.B      $99,$BC,$CF,$F4,$00,$00,$8E,$E4 ;* 18
  147.           DC.B      $C5,$CE,$E2,$C9,$C1,$D1,$D2,$D3 ;* 20
  148.           DC.B      $D4,$FF,$00,$8F,$B7,$B8,$80,$FB ;* 28
  149.           DC.B      $DF,$A5,$D0,$F3,$F2,$A8,$00,$00 ;* 30
  150.           DC.B      $00,$20,$00,$00,$00,$00,$00,$00 ;* 38
  151.           DC.B      $00,$00,$00,$00,$00,$00,$00,$00 ;* 40
  152.           DC.B      $00,$00,$DA,$00,$00,$00,$D7,$00 ;* 48
  153.           DC.B      $00,$00,$00,$00,$00,$00,$00,$00 ;* 50
  154.           DC.B      $00,$00,$00,$00,$00,$00,$00,$00 ;* 58
  155.           DC.B      $B5,$00,$00,$AE,$AF,$E8,$B6,$A2 ;* 60
  156.           DC.B      $93,$95,$A3,$96,$97,$90,$FD,$FE ;* 68
  157.           DC.B      $EA,$FC,$00,$00,$00,$00,$00,$00 ;* 70
  158.           DC.B      $00,$00,$00,$00,$00,$00,$00,$00 ;* 78
  159. pglength:
  160.           DC.L      0
  161. install:
  162.           MOVEA.L   4(A7),A5       ;* basepage
  163.           LEA       pglength(PC),A0
  164.           LEA       install(PC),A1
  165.           MOVE.L    A1,D0
  166.           SUB.L     A5,D0          ;* calculate length
  167.           MOVE.L    D0,(A0)
  168.           MOVE.L    D0,-(A7)       ;* length
  169.